/*
 * @Author: 陈德基
 * @Date: 2021-11-15 15:45:08
 * @LastEditTime: 2021-11-28 09:57:48
 * @Description: 
 * @FilePath: \copy_gsy_github_app_flutter\lib\page\main\controllers\controller.dart
 * 联系方式：
 * wx: melody_2009
 * qq: 7815171323 
 */
import 'package:copy_gsy_github_app_flutter/common/behavior/base_loading_behavior.dart';
import 'package:copy_gsy_github_app_flutter/page/main/behavior/dynamic_list_request.dart';
import 'package:copy_gsy_github_app_flutter/repository/user_repository.dart';
import 'package:get/get.dart';

import '../index.dart';

class MainController extends GetxController {
  MainController();

  /// 响应式成员变量

  final state = MainState();

  /// 成员变量

  /// 生命周期

  ///在 widget 内存中分配后立即调用。
  ///你可以用它来为控制器初始化 initialize 一些东西。
  @override
  void onInit() {
    super.onInit();
    // new 对象
    // 初始静态数据
  }

  ///在 onInit() 之后调用 1 帧。这是进入的理想场所
  ///导航事件，例如 snackbar、对话框或新route，或
  ///async 异步请求。
  @override
  void onReady() async {
    super.onReady();
    await getUserInfo();
    refreshDynamic(init: true);
  }

  Future refreshDynamic({bool init = false}) async {
    var getDynamicBehavior;
    if (init) {
      getDynamicBehavior = RequestDynamicBehavior(wrap: ShowLoadingBehavior());
    } else {
      getDynamicBehavior = RequestDynamicBehavior();
    }
    getDynamicBehavior.loading();
    getDynamicBehavior.parames = state.user?.login ?? '';
    var res = await getDynamicBehavior.request();
    getDynamicBehavior.finishLoad();
    if (res.data != null) {
      state.dynamics.clear();
      state.dynamics.addAll(res.data);
    }
    if (res.next != null) {
      var nexRes = await res.next!();
      state.dynamics.clear();
      state.dynamics.addAll(nexRes.data);
    }
  }

  void loadMoreDynamic() {}

  ///在 [onDelete] 方法之前调用。 [onClose] 可能用于
  ///处理控制器使用的资源。就像 closing events 一样，
  ///或在控制器销毁之前的流。
  ///或者处置可能造成一些内存泄漏的对象，
  ///像 TextEditingControllers、AnimationControllers。
  ///将一些数据保存在磁盘上也可能很有用。
  @override
  void onClose() {
    super.onClose();
    // 1 stop & close 关闭对象
    // 2 save 持久化数据
  }

  ///dispose 释放内存
  @override
  void dispose() {
    super.dispose();
    // dispose 释放对象
  }

  // 应用二次点击退出的控制
  DateTime? lastBackClickTime;
  // 应用首页的当前模块定位

  bool exitApp() {
    if (lastBackClickTime == null ||
        DateTime.now().difference(this.lastBackClickTime!) >
            Duration(seconds: 2)) {
      this.lastBackClickTime = DateTime.now();
      return false;
    } else {
      return true;
    }
  }

  Future getUserInfo() async {
    var res = await UserRepository.getUserInfoLocal();
    state.user = res.data;
  }
}
